در لینوکس، شما میتوانید پردازشهای در حال اجرا را بین پیشزمینه (Foreground) و پسزمینه (Background) جابجا کنید. این قابلیت به شما امکان میدهد تا چندین کار را همزمان در یک ترمینال مدیریت کنید. در این جلسه با مفاهیم Jobs، Background/Foreground و ابزار kill برای مدیریت و پایان دادن به پردازشها آشنا میشویم.
&
با قرار دادن علامت & در انتهای یک دستور، آن پردازش در پسزمینه (Background) اجرا میشود و ترمینال برای اجرای دستورات دیگر آزاد میشود.
توضیح: دستور sleep 100 در پسزمینه اجرا میشود. خروجی [1] 12345 نشان میدهد که این پردازش با شماره Job (1) و PID (12345) در پسزمینه اجرا میشود.
jobs
دستور jobs لیست پردازشهای پسزمینه (Jobs) را که در ترمینال جاری راهاندازی شدهاند، نمایش میدهد.
توضیح: خروجی نشان میدهد که یک Job با شماره [1] در حال اجرا است.
خروجی jobs شامل شماره Job (در کروشه)، وضعیت (Running, Stopped, Done) و نام دستور است. علامت + نشاندهنده Job پیشفرض (آخرین Job) و علامت - نشاندهنده Job قبلی است.
fg
با دستور fg (مخفف Foreground) میتوانید یک Job پسزمینه را به پیشزمینه (Foreground) بیاورید.
توضیح: fg 1 Job شماره ۱ را به پیشزمینه میآورد. اگر شماره Job را وارد نکنید، آخرین Job (با علامت +) به پیشزمینه میآید.
Ctrl+Z
با فشار دادن کلیدهای Ctrl + Z، یک پردازش در حال اجرا در پیشزمینه متوقف (Suspended) میشود و به پسزمینه منتقل میگردد.
توضیح: با فشردن Ctrl+Z، پردازش sleep 100 متوقف (Stopped) شده و به پسزمینه منتقل میشود.
bg
با دستور bg (مخفف Background) میتوانید یک Job متوقفشده را در پسزمینه ادامه دهید.
توضیح: bg 1 Job شماره ۱ را در پسزمینه ادامه میدهد. اگر شماره Job را وارد نکنید، آخرین Job متوقفشده را ادامه میدهد.
command & → اجرا در پسزمینهjobs → نمایش Jobsfg %N → آوردن Job شماره N به پیشزمینهCtrl+Z → متوقف کردن Job پیشزمینهbg %N → ادامه Job متوقفشده در پسزمینهkill و سیگنالها
دستور kill برای ارسال سیگنال به پردازشها استفاده میشود. رایجترین کاربرد آن، پایان دادن (Terminate) به یک پردازش با ارسال سیگنال SIGTERM (مقدار ۱۵) است.
توضیح: این دستور سیگنال SIGTERM (پایان عادی) را به پردازش با PID 12345 ارسال میکند.
شما میتوانید سیگنال مورد نظر را با عدد یا با نام به kill بدهید.
| سیگنال | مقدار | عملکرد | توضیح |
|---|---|---|---|
| SIGHUP | 1 | Term | قطع اتصال ترمینال کنترلکننده |
| SIGINT | 2 | Term | وقفه از صفحه کلید (Ctrl+C) |
| SIGQUIT | 3 | Core | خروج از صفحه کلید (Ctrl+\) |
| SIGKILL | 9 | Term | کشتن فوری (قابل نادیدهگیری نیست) |
| SIGTERM | 15 | Term | پایان عادی (پیشفرض kill) |
| SIGSTOP | 17,19,23 | Stop | متوقف کردن (قابل نادیدهگیری نیست) |
| SIGTSTP | 18,20,24 | Stop | توقف از ترمینال (Ctrl+Z) |
| SIGCONT | 19,18,25 | Cont | ادامه پردازش متوقفشده |
سیگنالهای SIGKILL (9) و SIGSTOP (17) قابل نادیدهگیری، مسدودسازی یا گرفتن (catch) نیستند. یعنی با ارسال این سیگنالها، پردازش اجباری پایان مییابد یا متوقف میشود.
توضیح: ارسال سیگنال SIGKILL (کشتن فوری) به پردازش با PID 12345. این یک روش اجباری برای پایان دادن به پردازش است.
توضیح: معادل kill -15 یا kill 12345 است. سیگنال SIGTERM را ارسال میکند.
توضیح: kill -9 -1 سیگنال SIGKILL را به همه پردازشهایی که شما اجازه کشتن آنها را دارید، ارسال میکند. این دستور بسیار خطرناک است و میتواند سیستم را از کار بیندازد!
برای مشاهده لیست کامل سیگنالها در سیستم خود، از دستور kill -l استفاده کنید.
ps و grep برای پیدا کردن PID
برای پیدا کردن PID یک پردازش و سپس کشتن آن، میتوانید از ترکیب ps و grep استفاده کنید.
توضیح: ابتدا PID مرورگر Firefox را پیدا کرده و سپس با kill -9 آن را بهاجبار میبندیم.
& در انتهای دستور.jobs.fg.Ctrl+Z.bg.kill و سیگنالهای مناسب.15 (SIGTERM) برای پایان عادی، 9 (SIGKILL) برای کشتن اجباری.kill -9 -1 همه پردازشها را میکشد و خطرناک است.sleep 300 را با & در پسزمینه اجرا کنید.jobs آن را ببینید.fg آن را به پیشزمینه بیاورید و سپس با Ctrl+Z متوقف کنید.bg آن را در پسزمینه ادامه دهید.kill %1 (یا kill با PID) آن را پایان دهید.ps aux | grep firefox PID مرورگر خود را پیدا کنید و با kill -9 آن را ببندید.